package com.neusoft.hifly.attachment.file.entity;

import java.io.Serializable;
import java.time.LocalDateTime;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;

import com.neusoft.hifly.commons.lang.LocalDateUtil;
import com.neusoft.hifly.core.utils.GlobalConstants;

/**
 * Title: 附件服务
 * <p>
 * Description: 附件_附件下载记录表对象
 * <p>
 * Copyright: 2019
 * <p>
 * Company: 东软汉枫
 *
 * @author lh_neu
 * @version 1.0.0
 */
@JsonIgnoreProperties(ignoreUnknown = true)
@TableName(value = GlobalConstants.DYNAMIC_TABLE_NAME_PREFIX + "_FILE_DOWN")
public class FileDownObj implements Serializable {
	private static final long serialVersionUID = -156136150200314L;
	// 主键
	@TableId(value = "ID", type = IdType.AUTO)
	private int id;
	// 租户逻辑ID
	@TableField(value = "ORGAN_LOGIC_ID")
	private long organLogicId;
	// 附件与对象关联ID
	@TableField(value = "OBJ_LOGIC_ID")
	private long objLogicId;
	// 主附件逻辑ID
	@TableField(value = "FILE_LOGIC_ID")
	private long fileLogicId;
	// 下载时间
	@TableField(value = "DOWNLOAD_TIME")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	@JsonDeserialize(using = LocalDateTimeDeserializer.class)
	@JsonSerialize(using = LocalDateTimeSerializer.class)
	private LocalDateTime downloadTime;
	// MAC
	@TableField(value = "MAC")
	private String mac;
	// IP
	@TableField(value = "IP")
	private String ip;
	// 扩展字段1
	@TableField(value = "EXT1")
	private String ext1;
	// 扩展字段2
	@TableField(value = "EXT2")
	private String ext2;
	// 扩展字段3
	@TableField(value = "EXT3")
	private String ext3;
	// 扩展字段4
	@TableField(value = "EXT4")
	private String ext4;
	// 扩展字段5
	@TableField(value = "EXT5")
	private String ext5;

	// ################### 临时数据 ####################

	// 格式化后的字符串日期
	@TableField(exist = false)
	private String downloadTimeStr;

	/**
	 * 构造方法
	 */
	public FileDownObj() {
	}

	/**
	 * 构造方法
	 *
	 * @param fileLogicId
	 *            主附件逻辑ID
	 * @param objLogicId
	 *            附件与对象关联ID
	 * @param mac
	 *            MAC
	 * @param ip
	 *            IP
	 */
	public FileDownObj(final long fileLogicId, final long objLogicId, final String mac, final String ip) {
		super();
		this.fileLogicId = fileLogicId;
		this.objLogicId = objLogicId;
		this.mac = mac;
		this.ip = ip;
	}

	/**
	 * 得到对象的哈希值
	 *
	 * @return int 对象的哈希值
	 */
	@Override
	public int hashCode() {
		return new HashCodeBuilder().append(this.getId()).toHashCode();
	}

	/**
	 * 比较两个对象是否相等
	 *
	 * @param other
	 *            要比较的对象
	 * @return boolean 相同返回true，否则返回flase
	 */
	@Override
	public boolean equals(final Object other) {
		if (!(other instanceof FileDownObj)) {
			return false;
		}
		final FileDownObj castOther = (FileDownObj) other;
		return new EqualsBuilder().append(this.getId(), castOther.getId()).isEquals();
	}

	/**
	 * 返回对象的字符串值
	 *
	 * @return String 表示用户对象的字符串值
	 */
	@Override
	public String toString() {
		return new ToStringBuilder(this).append("附件_附件下载记录表", this.getDownloadTimeStr()).toString();
	}

	/**
	 * 将DATE类型的时间格式化为字符串类型
	 *
	 * @return 字符串时间
	 */
	public String getDownloadTimeStr() {
		if (this.downloadTime != null) {
			this.downloadTimeStr = LocalDateUtil.showTime(this.downloadTime);
		}
		return this.downloadTimeStr;
	}

	public int getId() {
		return id;
	}

	public void setId(final int id) {
		this.id = id;
	}

	public long getOrganLogicId() {
		return organLogicId;
	}

	public void setOrganLogicId(final long organLogicId) {
		this.organLogicId = organLogicId;
	}

	public long getObjLogicId() {
		return objLogicId;
	}

	public void setObjLogicId(final long objLogicId) {
		this.objLogicId = objLogicId;
	}

	public long getFileLogicId() {
		return fileLogicId;
	}

	public void setFileLogicId(final long fileLogicId) {
		this.fileLogicId = fileLogicId;
	}

	public LocalDateTime getDownloadTime() {
		return downloadTime;
	}

	public void setDownloadTime(final LocalDateTime downloadTime) {
		this.downloadTime = downloadTime;
	}

	public String getMac() {
		return mac;
	}

	public void setMac(final String mac) {
		this.mac = mac;
	}

	public String getIp() {
		return ip;
	}

	public void setIp(final String ip) {
		this.ip = ip;
	}

	public String getExt1() {
		return ext1;
	}

	public void setExt1(final String ext1) {
		this.ext1 = ext1;
	}

	public String getExt2() {
		return ext2;
	}

	public void setExt2(final String ext2) {
		this.ext2 = ext2;
	}

	public String getExt3() {
		return ext3;
	}

	public void setExt3(final String ext3) {
		this.ext3 = ext3;
	}

	public String getExt4() {
		return ext4;
	}

	public void setExt4(final String ext4) {
		this.ext4 = ext4;
	}

	public String getExt5() {
		return ext5;
	}

	public void setExt5(final String ext5) {
		this.ext5 = ext5;
	}

	public void setDownloadTimeStr(final String downloadTimeStr) {
		this.downloadTimeStr = downloadTimeStr;
	}

}